package com.example.object_oriented.abstracts;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Test;

/**
 *
 * 抽象类除了不能实例化对象之外，类的其它功能依然存在，成员变量、成员方法和构造方法的访问方式和普通类一样。
 * 由于抽象类不能实例化对象，所以抽象类必须被继承，才能被使用。也是因为这个原因，通常在设计阶段决定要不要设计抽象类。
 * @author readpage
 * @date 2023-01-05 15:44
 */
@Data
@NoArgsConstructor
public abstract class Employee {
    private String name;
    private String address;
    private int number;

    public Employee(String name, String address, int number) {
        System.out.println("Constructing an Employee");
        this.name = name;
        this.address = address;
        this.number = number;
    }

    public double computePay() {
        System.out.println("Inside Employee computePay");
        return 0.0;
    }

    public void mailCheck() {
        System.out.println("Mailing a check to" + this.name + " " +this.address);
    }

    @Test
    public void test() {
        /* 以下是不允许的，会引发错误 */
//        Employee e = new Employee("George W.", "Houston, TX", 43);
//      e.mailCheck();
    }
}
